The present invention relates to communications in general and in particular to the transmission of signals capable of conveying information and detection of those signals in chip-to-chip communication.
In communication systems, a goal is to transport information from one physical location to another. It is typically desirable that the transport of this information is reliable, is fast and consumes a minimal amount of resources. One common information transfer medium is the serial communications link, which may be based on a single wire circuit relative to ground or other common reference, or multiple such circuits relative to ground or other common reference. A common example uses singled-ended signaling (“SES”). SES operates by sending a signal on one wire, and measuring the signal relative to a fixed reference at the receiver. A serial communication link may also be based on multiple circuits used in relation to each other. A common example of the latter uses differential signaling (“DS”). Differential signaling operates by sending a signal on one wire and the opposite of that signal on a matching wire. The signal information is represented by the difference between the wires, rather than their absolute values relative to ground or other fixed reference.
There are a number of signaling methods that maintain the desirable properties of DS while increasing pin efficiency over DS. Vector signaling is a method of signaling. With vector signaling, a plurality of signals on a plurality of wires is considered collectively although each of the plurality of signals might be independent. Each of the collective signals is referred to as a component and the number of plurality of wires is referred to as the “dimension” of the vector. In some embodiments, the signal on one wire is entirely dependent on the signal on another wire, as is the case with DS pairs, so in some cases the dimension of the vector might refer to the number of degrees of freedom of signals on the plurality of wires instead of exactly the number of wires in the plurality of wires.
With binary vector signaling, each component or “symbol” of the vector takes on one of two possible values. With non-binary vector signaling, each symbol has a value that is a selection from a set of more than two possible values. Any suitable subset of a vector signaling code denotes a “sub code” of that code. Such a subcode may itself be a vector signaling code.
A vector signaling code, as described herein, is a collection C of vectors of the same length N, called codewords, a second collection A of vectors of length N+1, called multi-input comparators (MIC's) comparing a linear combination of the values on the wires against another linear combination, and a set of “Inactive” elements wherein each inactive is a pair (c, λ), c being an element of C, and λ being an element of Λ. A pair (c, λ) that is not inactive is called “active.” In operation, the coordinates of the codewords are bounded, and we choose to represent them by real numbers between −1 and 1. The ratio between the binary logarithm of the size of C and the length N is called the pin-efficiency of the vector signaling code.
In operation, a MIC represented by a vector (ml, . . . , mN, mN+1) calculates the sign of the scalar product of the vector (ml, . . . , mN) with the vector of the N values on the wires, compares the outcome against the value mN+1, also called the reference of the MIC, and outputs a binary value corresponding to the computed sign. A MIC with reference 0 is called “central.” A central MIC with the property that the sum of its coordinates is 0 as well is called “common mode resistant.” This is because the operation of this MIC is independent of changing the values of all the wires by the same “common mode” value. If all MIC's are central, then we remove the final coordinate (i.e., the reference) of the MIC, and represent the MIC by its N first coordinates only.
In operation, a codeword is uniquely determined by the vector of signs of scalar products of that codeword c with all the MIC's λ, for which (c, λ) is active.
A vector signaling code is called “balanced” if for all its codewords the sum of the coordinates is always zero. Balanced vector signaling codes have several important properties. For example, as is well-known to those of skill in the art, balanced codewords lead to lower electromagnetic interference (EMI) noise than non-balanced ones. Also, if common mode resistant communication is required, it is advisable to use balanced codewords, since otherwise power is spent on generating a common mode component that is cancelled at the receiver.
Another fundamental parameter of a vector signaling code is its ISI ratio as defined in Hormati I: the ISI ratio of a MIC λ for the given set C of codewords is the ratio of the largest scalar product |<λ,c>| to the smallest scalar product |<λ,d>| for all codewords c and d such that (c, λ) and (d, λ) are active. A code is said to have ISI ratio x if x is the maximum of the ISI ratios of its MIC's. As taught by Hormati I, the lower the ISI ratio, the less susceptible the vector signaling code is to intersymbol interference noise.
For example, DS is a vector signaling code of length 2, and pin-efficiency ½ consisting of the codewords (1,−1) and (−1,1). The set Λ of MIC's contains one MIC only, given by the vector (1,−1). DS is balanced and has ISI ratio 1.
A class of vector signaling codes disclosed in Cronie II is the class of permutation modulation or PM codes of Slepian, first described in Slepian I for other communication settings. These codes have the property that each codeword is a permutation of a vector x0. The vector x0 is called the generator of the signal constellation and the signal constellation defines a permutation modulation code. In a preferred embodiment the vector x0 is defined by a sequence of m integersl0≦l1≦□≦lm-1  (Eqn. 1)
It follows that
  N  =            ∑              i        =        0                    m        -        1              ⁢                  l        i            .      The generator x0 may have the form
                              x          0                =                  (                                                                                          a                    0                                    ,                  …                  ⁢                                                                          ,                                      a                    0                                                  ︸                                            l                0                                      |                                                                                                      a                      1                                        ,                    …                    ⁢                                                                                  ,                                          a                      1                                                        ︸                                                  l                  1                                            ⁢                                              …                                            ⁢                                                                                          a                                              m                        -                        1                                                              ,                    …                    ⁢                                                                                  ,                                          a                                              m                        -                        1                                                                              ︸                                                  l                                      m                    -                    1                                                                                )                                    (                  Eqn          .                                          ⁢          2                )            where a0 to am-1 are non-zero numbers such that
            ∑              i        =        0                    m        -        1              ⁢                  l        i            ⁢              a        i              =  0.
PM-codes have a number of important and practically relevant properties. For example, they can be detected using common-mode resistant comparators. In very high speed applications, and where there is expectation that a reference value may be subject to change depending on the communications conditions, reference-less comparators often lead to a higher signal margin and hence to a higher integrity of the recovered signals. Moreover, since the net current sum on all the interface wires is zero, this type of vector signaling code produces less EMI noise than otherwise; in addition, since no energy is launched into the common mode of the wires, this type of signaling is also efficient in terms of the power it uses.
An example of a typical systems environment incorporating vector signaling code communication is shown in FIG. 1.
Information to be transmitted 100 is obtained from a source SRC and presented to transmitter 120. Within the transmitter, the information is encoded 122 as symbols of a vector signaling code 125, which are then presented to transmit driver 128, generating physical representations of the code symbols on a collection of wires 145 which together comprise the communications channel 140.
Receiver 160 accepts physical signals from communications channel 140, detects the received codewords using, as one example, a collection of differential binary MIC's 166, and then decodes 168 those detected values 167 to obtain the received information 180 output to a destination device DST.
In a practical embodiment, signals 145 may undergo significant change in amplitude, waveform, and other characteristics between emission by transmitter 120 and arrival at receiver 160, due to the transmission characteristics of communications channel 140. Therefore, it is common practice to incorporate signal amplification and/or equalization 162 into communications channel receivers.
Examples of vector signaling methods are described in Cronie I, Cronie II, Cronie III, Fox I, Fox II, Fox III, Holden I, Shokrollahi I, Shokrollahi II, and Hormati I. For these vector signaling codes, the comparators 166 are all common mode resistant, i.e., they compare a linear combination of some of the values against a linear combination of some other values, and the sum of the weights of each of these linear combinations is the same.